跳到主要内容

3.康威生命游戏(16x16)

康威生命游戏是一个二维细胞自动机。

这个游戏在一个由细胞组成的二维网格上进行,每个细胞要么是1(存活),要么是0(死亡)。在每个时间步,每个细胞会根据其邻居的数量改变状态:

  • 0-1个邻居:细胞变为0。
  • 2个邻居:细胞状态不变。
  • 3个邻居:细胞变为1。
  • 4个或以上邻居:细胞变为0。

该游戏原设定在一个无限的网格上进行。在这个电路中,我们将使用一个16x16的网格。为了增加趣味性,我们将使用一个16x16的环形网格,即网格的边缘会连接到网格的另一侧。例如,角落里的细胞(0,0)有8个邻居:(15,1),(15,0),(15,15),(0,1),(0,15),(1,1),(1,0)和(1,15)。这个16x16的网格由一个长度为256的向量表示,每行16个细胞由一个子向量表示:q[15:0]代表第0行,q[31:16]代表第1行,依此类推。(此工具支持SystemVerilog,因此您可以使用二维向量,如果您愿意的话。)

  • load: 在下一个时钟边沿将数据加载到q中,用于加载初始状态。
  • q: 当前16x16的生命游戏状态,每时钟周期更新一次。

游戏状态应该每经过一个时钟周期就前进一个时间步。

约翰·康威,数学家以及生命游戏细胞自动机的创造者,于2020年4月11日因COVID-19逝世。

模块声明

module top_module(
input clk,
input load,
input [255:0] data,
output [255:0] q );

做题区